import { IPSApplication } from './app/ipsapplication';
import { IPSModelObject } from './ipsmodel-object';
import { IPSModelService } from './ipsmodel-service';

/**
 * 模型基础服务代理对象
 * @export
 * @interface IPSModelService
 */
export interface IPSModelServiceProxy extends IPSModelService {
  /**
   * 初始化
   * @param iPSModelService
   * @param tag
   */
  init(iPSModelService: IPSModelService, tag: any): void;

  /**
   * 原模型服务
   *
   * @return {*}  {IPSModelService}
   */
  getRealPSModelService(): IPSModelService;

  /**
   *
   *
   * @param {IModel} objectNode
   * @return {*}  {IModel}
   */
  getRealObjectNode(objectNode: IModel): IModel;

  /**
   * 从模型节点中获取指定对象
   *
   * @param {IPSModelObject} relatedPSModelObject
   * @param {string} cls
   * @param {*} objNode
   * @param {string} strTag
   * @return {*}  {IPSModelObject}
   */
  getPSModel4(
    relatedPSModelObject: IPSModelObject,
    cls: string,
    objNode: any,
    strTag: string,
  ): IPSModelObject;

  /**
   * 从模型数组中获取指定对象
   *
   * @param {IPSModelObject} relatedPSModelObject
   * @param {string} cls
   * @param {any[]} list
   * @param {*} objKey
   * @return {*}  {IPSModelObject}
   */
  getPSModel5(
    relatedPSModelObject: IPSModelObject,
    cls: string,
    list: any[],
    objKey: any,
  ): IPSModelObject;

  /**
   * 获取应用
   *
   * @return {*}  {IPSApplication}
   */
  getPSApplication(): IPSApplication;

  /**
   * 查找子模型
   *
   * @param {IPSModelObject} relatedPSModelObject
   * @param {string} cls
   * @param {IModel} objNode
   * @return {*}  {IPSModelObject}
   */
  getChildPSModelObject(
    relatedPSModelObject: IPSModelObject,
    cls: string,
    objNode: IModel,
  ): IPSModelObject;

  /**
   * 查找子模型
   *
   * @param {IPSModelObject} relatedPSModelObject
   * @param {string} cls
   * @return {*}  {IPSModelObject}
   */
  getParentPSModelObject(
    relatedPSModelObject: IPSModelObject,
    cls: string,
  ): IPSModelObject;
}
